package configs

import (
	"encoding/json"
	"go.uber.org/zap"
	"io"
	"os"
	"shorturl/log"
)

// App Application config
type App struct {
	Host   string // 服务地址
	Port   string // 挂载端口
	Mode   string // 运行模式
	Secret string // 加密秘钥
}

// Database DatabaseConfig 数据库配置
type Database struct {
	Dsn    string
	Prefix string
}

// Redis RedisConfig redis 配置
type Redis struct {
	Host     string
	Port     string
	User     string
	Password string
	Db       int
	Prefix   string
}

// Config ServerConfig 服务器配置
type Config struct {
	App      App
	Database Database
	Redis    Redis
}

// ReadConfig 读取配置文件
func ReadConfig(filePath string) (config Config, err error) {
	jsonFile, err := os.Open(filePath)
	if err != nil {
		log.Logger.Error("读取配置文件失败", zap.Error(err))
		return config, err
	}
	defer jsonFile.Close()

	byteValue, err := io.ReadAll(jsonFile)
	if err != nil {
		log.Logger.Error("读取配置文件内容失败", zap.Error(err))
		return config, err
	}

	err = json.Unmarshal(byteValue, &config)
	if err != nil {
		log.Logger.Error("解析配置文件失败", zap.Error(err))
		return config, err
	}
	return config, nil
}
